import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import { visualizer } from 'rollup-plugin-visualizer'
import { resolve } from 'node:path'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    visualizer({
      open: true,
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },

  build: {
    lib: {
      entry: resolve(__dirname, 'install.js'), // !!打包进库的依赖是从此入口开始拓扑的，如果不在此文件里面引入注册draggable，会导致使用本库时获取不到draggable
      name: 'IcyTailForm',
      fileName: (type) => `icytailform.${type}.js`, 
      // 当fileName为普通字符串的时候输出文件为 xxx.js和 xxx.umd.cjs  存在两个问题：
      // 1.xxx.js 该文件打包后存在 import xx from 'vue'这行代码，但是vue3项目是无法导入的。不知为何会出现这行代码，发布时需手动修改打包后的文件为 import * as xx from 'vue'
      // 2.xxx.umd.cjs 未配置.cjs解析的项目引入本库时会报错 Module parse failed: Unexpected token (1:11155)You may need an appropriate loader to handle this file type
    },
    commonjsOptions: {
      include: /node_modules/, //这里记得把lib目录加进来，否则生产打包会报错！！
    },
    rollupOptions: {
      // 确保外部化处理那些你不想打包进库的依赖
      external: ['vue', 'element-plus'],
      output: {
        exports: 'default', //要支持CDN引入必须设置此参数！！！
        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
        globals: {
          vue: 'Vue',
          'element-plus': 'ElementPlus',
        },
      },
    },
  },
})
